package ontoTree.ontoTree;

import java.awt.Component;

import javax.swing.ImageIcon;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;

/**
 * Classe abstrata que renderiza a jtree, com intuito de personalizar os �cones
 * 
 * @author ligia
 * 
 */
public abstract class RelOntoTreeRenderer extends DefaultTreeCellRenderer {

	@Override
	public Component getTreeCellRendererComponent(JTree tree, Object value,
			boolean selected, boolean expanded, boolean leaf, int row,
			boolean hasFocus) {
		super.getTreeCellRendererComponent(tree, value, selected, expanded,
				leaf, row, hasFocus);
		DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
		ImageIcon icon = createImageIcon(setIconType(node));
		if (icon != null) {
			setIcon(icon);
		} else {
			System.err
					.println("N�o foi poss�vel recuperar a imagem requerida! O �cone default ser� usado!");
		}
		if (setTextType(node) != null) {
			setText(setTextType(node));
		}

		return this;
	}

	/**
	 * Busca a imagem que ser� setada no n� da �rvore
	 * 
	 * @param path
	 * @return um ImageIcon ou null, caso o caminho da imagem seja inv�lido
	 * 
	 * 
	 */
	private ImageIcon createImageIcon(String path) {
		java.net.URL imgURL = RelOntoTreeRenderer.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("N�o foi poss�vel encontrar a imagem: " + path);
			return null;
		}
	}

	/**
	 * M�todo a ser implementado por cada �rvore espec�fica, para setar a imagem
	 * 
	 * @param node
	 * @return
	 * 
	 */
	public abstract String setIconType(DefaultMutableTreeNode node);

	/**
	 * M�todo a ser implementado por cada �rvore espec�fica, para setar
	 * aparencia do texto do n�
	 * 
	 * @param node
	 * @return
	 * 
	 */
	public abstract String setTextType(DefaultMutableTreeNode node);

}
